1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| (function flexible(window, document) { var docEl = document.documentElement var dpr = window.devicePixelRatio || 1 // adjust body font size function setBodyFontSize() { if (document.body) { document.body.style.fontSize = (12 * dpr) + 'px' } else { document.addEventListener('DOMContentLoaded', setBodyFontSize) } }
setBodyFontSize();
// set 1rem = viewWidth / 10 function setRemUnit() { fix1px() var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px' }
setRemUnit()
// reset rem unit on page resize window.addEventListener('resize', setRemUnit) window.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit() } })
// detect 0.5px supports if (dpr >= 2) { var fakeBody = document.createElement('body') var testElement = document.createElement('div') testElement.style.border = '.5px solid transparent' fakeBody.appendChild(testElement) docEl.appendChild(fakeBody) if (testElement.offsetHeight === 1) { docEl.classList.add('hairlines') } docEl.removeChild(fakeBody) }
function fix1px() { var metas = document.querySelectorAll('meta') metas.forEach(item=>{ if(item.name == 'viewport'){ document.getElementsByTagName('head')[0].removeChild(item) } })
//解决1px线问题 var scale = 1/dpr var meta = document.createElement('meta') meta.setAttribute('name', 'viewport') meta.setAttribute('content', 'width=device-width,initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no') document.getElementsByTagName('head')[0].appendChild(meta) } }(window, document))
|